home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / lists / mint / l_0399 / 68 < prev    next >
Internet Message Format  |  1994-08-27  |  2KB

  1. From: Julian F. Reschke <julian@GINA.UNI-MUENSTER.DE>
  2. Subject: New Fcntl's
  3. Date: Thu, 28 Jan 93 19:56:42 MET DST
  4.  
  5. Proposal for new Fcntl opcodes (1st attempt)
  6. --------------------------------------------
  7.  
  8. #define FUTIME      (('F'<< 8) | 3)
  9. #define FTRUNCATE   (('F'<< 8) | 4)
  10.  
  11. These new Fcntl calls can be implemented by loadable (or builtin) file
  12. systems.
  13.  
  14.  
  15. Descriptions (party copied from POSIX.1 and SunOS manual pages):
  16. ------------
  17.  
  18. struct mutimbuf {
  19.     ULONG actime;    /* GEMDOS format */
  20.     ULONG modtime;
  21. };
  22.  
  23. LONG Fcntl (WORD fh, struct mutimbuf *times, FUTIME);
  24.  
  25. Sets the access and modification times of the named file.
  26.  
  27. The times argument is interpreted as a pointer to a mutimbuf structure,
  28. and the access and modification times are set to the values contained
  29. in the designated structure.
  30.  
  31. Returns: 0 (OK), EINVAL (opcode not available) or another error code.
  32.  
  33.  
  34.  
  35. LONG Fcntl (WORD fh, LONG length, FTRUNCATE);
  36.  
  37. This Fcntl opcode causes the file referred to by fh to have a size equal
  38. to length bytes. If the file was previously longer than length, the
  39. extra bytes are removed from the file. If it was shorter, bytes between
  40. the old and new lengths are read as zeroes. The file must be open for
  41. writing.
  42.  
  43. Returns: 0 (OK), EINVAL (opcode not available) or another error code.
  44.  
  45.  
  46. Example
  47. -------
  48.  
  49. UNTESTED utime() implementation (source copied from MiNT-Lib PL26):
  50.  
  51. int
  52. utime(_filename, tset)
  53.       const char *_filename;
  54.       const struct utimbuf *tset;
  55. {
  56.     int fh;
  57.     time_t settime;
  58.     struct mutimbuf mt;
  59.     char filename[PATH_MAX];
  60.     long r;
  61.  
  62.     if (tset) {
  63.         mt.actime = dostime (tset->actime);
  64.         mt.modtime = dostime (tset->modtime);
  65.     }
  66.     else {
  67.         time (&settime);
  68.         mt.actime = mt.modtime = settime;
  69.     }
  70.  
  71.     (void)_unx2dos(_filename, filename);
  72.     fh = (int) Fopen(filename, 2);
  73.     if (fh < 0) {
  74.         errno = -fh;
  75.         return -1;
  76.     }
  77.     
  78.     r = Fcntl (fh, &mt, FUTIME);
  79.     
  80.     if (r == EINVAL)
  81.         r = Fdatime ((_DOSTIME *) &mt.modtime, fh, 1);
  82.     
  83.     if ((fh = Fclose(fh)) != 0) {
  84.         errno = -fh;
  85.         return -1;
  86.     }
  87.     return 0;
  88. }
  89.  
  90.  
  91. -- 
  92. ________________ cut here _________________________
  93. Julian F. Reschke, Hensenstr. 142, D-W4400 Muenster
  94.   eMail: julian@math.uni-muenster.de, jr@ms.maus.de
  95. ________ correct me if I'm wrong __________________
  96.